#include <stdio.h>
  int main(){ 
     int len,n,m;
     int a[50005],temp,before=0;
      scanf("%d %d %d",&len,&n,&m);
      for(int i=0;i<n;i++)
      {  
         scanf("%d",&temp);//记录当前位置
       a[i]=temp-before;//记录两个石头间的距离
       before=temp;    //记录上一个石头位置
    }
     a[n]=len-before;
     if(n==m){//特殊情况直接输出
         printf("%d",len);
         return 0;
     }
     int r=len/(n-m),l=1,tp;// l 表示所求值的最小值，r为所求值的最大值
     //因为将总长度等分就是所求长度的最大值
 while(l<=r){//进行二分查找
     int mid=(l+r)/2,count=0;
     for(int i=0;i<=n;i++)
     {    tp=a[i];
           while(tp<mid&&i<n){
               i++;
               tp+=a[i];
               count++;//记录移除石头数目
           }
     }
     if(count<=m) l=mid+1;//若移除数目小于等于规定数目表明mid小于等于所求值，进行下一步查找
         else     r=mid-1;//mid大于所求值，缩小范围    
     }
     printf("%d",r);
     return 0;
  }